package com.xyulu.utils;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Set;

/**
 * @Description TODO
 * @Author luming
 * @Date 2021/3/11
 * @Version 1.0
 */
@Slf4j
public class FileUtil {

    /**
     * 上传文件
     * @param file
     * @param uploadDir
     * @return
     */
    public static String uploadFile(MultipartFile file, String uploadDir){
        try {
            //如果目录不存在，自动创建文件夹
            File dir = new File(uploadDir);
            if(!dir.exists()){
                dir.mkdirs();
            }
            String fileName = file.getOriginalFilename();
            // 当文件有后缀名时
            if (fileName.indexOf(".") >= 0) {
                // split()中放正则表达式; 转义字符"\\."代表 "."
                String[] fileNameSplitArray = fileName.split("\\.");
                // 加上random戳,防止附件重名覆盖原文件
                fileName = fileNameSplitArray[0] + (int) (Math.random() * 10000000) + "." + fileNameSplitArray[1];
            } else {
                // 加上random戳,防止附件重名覆盖原文件
                fileName = fileName + (int) (Math.random() * 10000000);
            }
            // 根据文件的全路径名字(含路径、后缀),new一个File对象dest
            File dest = new File(uploadDir + fileName);
            // 如果该文件的上级文件夹不存在，则创建该文件的上级文件夹及其祖辈级文件夹;
            file.transferTo(dest);
//            return uploadDir + fileName;
            //通过配置虚拟路径解决无法访问本地路径文件的问题
            return fileName;
        } catch (FileNotFoundException e) {
            log.error("exception is {}");
        } catch (IOException e) {
            log.error("exception is {}");
        }
        return "";
    }

    /**
     * 删除单个文件
     * @param path 被删除文件的文件名
     * @return 单个文件删除成功返回true，否则返回false
     */
    public static boolean deleteFile(String path) {
        File file = new File(path);
        //路径为文件且不为空则进行删除
        if (file.isFile() && file.exists()) {
            file.delete();
            return true;
        }
        return false;
    }

}
